//package com.kun.companion.core.ui.list;
//
//import com.kun.companion.core.ui.list.BaseListView;
//import javafx.animation.Interpolator;
//import javafx.animation.KeyFrame;
//import javafx.animation.KeyValue;
//import javafx.animation.Timeline;
//import javafx.geometry.Pos;
//import javafx.scene.control.Label;
//import javafx.scene.control.ListCell;
//import javafx.scene.control.ListView;
//import javafx.scene.image.Image;
//import javafx.scene.image.ImageView;
//import javafx.scene.layout.StackPane;
//import javafx.util.Duration;
//
///**
// * BaseListView - 高性能可折叠列表视图基类
// *
// * 扩展点:
// * 1. 自定义单元格: 重写 createCell() 方法返回自定义ListCell实现
// * 2. 样式调整: 通过修改 DEFAULT_STYLE 或覆写 initStyle() 方法
// * 3. 折叠逻辑: 覆写 createCollapseTrigger() 修改折叠触发器样式
// * 4. 动画控制: 调整 ANIMATION_DURATION 常量或重写 createCollapseAnimation()
// *
// * 运行逻辑:
// * 1. 初始化时构建折叠按钮并绑定点击事件
// * 2. 使用位移动画实现平滑折叠/展开效果
// * 3. 折叠状态下显示单元格图标，展开显示完整内容
// * 4. 自动维护布局约束，确保折叠后不遮挡其他组件
// */
//public class CollapseListView<T> extends ListView<T> {
//
//    // region 常量定义
//    private static final double EXPANDED_WIDTH = 400;
//    private static final double COLLAPSED_WIDTH = 30;
//    private static final Duration ANIMATION_DURATION = Duration.millis(0);
//    private static final String DEFAULT_STYLE = "/styles/base-list-view.css";
//    // endregion
//
//    // region 组件状态
//    protected boolean isCollapsed = false;
//    private final StackPane collapseTrigger = new StackPane();
//    // endregion
//
//    // region 初始化块
//    {
//        initializeView();
//        setupCollapseTrigger();
//        setupCellFactory();
//        loadStylesheet();
//    }
//    // endregion
//
//    private static String css="""
//.base-list-view {
//    -fx-background-color: #f5f5f5;
//    -fx-border-color: #e0e0e0;
//    -fx-border-width: 0 1px 0 0;
//}
//
//.collapse-trigger {
//    -fx-background-color: #ffffff;
//    -fx-border-radius: 4px;
//    -fx-background-radius: 4px;
//    -fx-effect: dropshadow(gaussian, rgba(0,0,0,0.1), 8, 0, 0, 2);
//    -fx-cursor: hand;
//}
//
//.cell-container {
//    -fx-padding: 8px;
//}
//
//.cell-text {
//    -fx-font-size: 14px;
//    -fx-text-fill: #333333;
//}
//
//.cell-icon {
//    -fx-fit-width: 32px;
//    -fx-fit-height: 32px;
//}
//""";
//
//    // region 核心方法
//    private void initializeView() {
//        setPrefWidth(EXPANDED_WIDTH);
//        setMinWidth(COLLAPSED_WIDTH);
//        getStyleClass().add("base-list-view");
//        getStylesheets().add(css);
//    }
//
//    private void setupCellFactory() {
//        setCellFactory(lv -> createCell());
//    }
//
//    /**
//     * 创建自定义单元格（主要扩展点）
//     */
//    protected ListCell<T> createCell() {
//        return new BaseListCell<>();
//    }
//
//    private void setupCollapseTrigger() {
//        collapseTrigger.getStyleClass().add("collapse-trigger");
//        collapseTrigger.setPrefSize(COLLAPSED_WIDTH, COLLAPSED_WIDTH);
//        collapseTrigger.setOnMouseClicked(e -> toggleCollapse());
//
//        // 绑定到列表顶部右侧
//        StackPane.setAlignment(collapseTrigger, Pos.TOP_RIGHT);
//        getChildren().add(collapseTrigger);
//    }
//
//    public void toggleCollapse() {
//        isCollapsed = !isCollapsed;
//        playCollapseAnimation();
////        requestLayout();
//        refresh();
//    }
//    // endregion
//
//    // region 动画控制
//    private void playCollapseAnimation() {
//        double targetWidth = isCollapsed ? COLLAPSED_WIDTH : EXPANDED_WIDTH;
//        Timeline timeline = new Timeline(
//                new KeyFrame(ANIMATION_DURATION,
//                        new KeyValue(prefWidthProperty(), targetWidth, Interpolator.EASE_BOTH))
//        );
//        timeline.play();
//    }
//    // endregion
//
//    // region 样式管理
//    private void loadStylesheet() {
////        String stylesheet = getClass().getResource(DEFAULT_STYLE).toExternalForm();
////        getStylesheets().add(stylesheet);
//    }
//
//    /**
//     * 初始化样式配置（可扩展点）
//     */
//    protected void initStyle() {
//        // 供子类覆写自定义样式
//    }
//    // endregion
//
//    // region 内部类 - 自定义单元格
//    public static class BaseListCell<T> extends ListCell<T> {
//        private final StackPane container = new StackPane();
//        private final Label textLabel = new Label();
//        private final ImageView iconView = new ImageView();
//
//        public BaseListCell() {
//            configureLayout();
//            initStyle();
//        }
//
//        private void configureLayout() {
//            container.getChildren().addAll(iconView, textLabel);
//            iconView.setManaged(false);
//            iconView.setVisible(false);
//            setGraphic(container);
//        }
//
//        @Override
//        protected void updateItem(T item, boolean empty) {
//            super.updateItem(item, empty);
//            if (empty || item == null) {
//                clearContent();
//            } else {
//                updateContent(item);
//            }
//        }
//
//        private void clearContent() {
//            textLabel.setText(null);
//            iconView.setImage(null);
//        }
//
//        private void updateContent(T item) {
//            CollapseListView<T> listView = (CollapseListView<T>) getListView();
//            if (listView.isCollapsed) {
//                showIcon(item);
//            } else {
//                showFullContent(item);
//            }
//        }
//
//        private void showIcon(T item) {
//            textLabel.setVisible(false);
//            iconView.setVisible(true);
//            // 示例实现，实际应通过自定义接口获取图标
//            iconView.setImage(new Image("/app-icon.png"));
//        }
//
//        private void showFullContent(T item) {
//            textLabel.setVisible(true);
//            iconView.setVisible(false);
//            textLabel.setText(item.toString());
//        }
//
//        protected void initStyle() {
//            container.getStyleClass().add("cell-container");
//            textLabel.getStyleClass().add("cell-text");
//            iconView.getStyleClass().add("cell-icon");
//        }
//    }
//    // endregion
//
//    // region 布局覆盖
//    @Override
//    protected void layoutChildren() {
//        super.layoutChildren();
//        // 保持折叠按钮在可视区域
//        collapseTrigger.toFront();
//    }
//    // endregion
//}